﻿// ----------------------------------------------------------------------------------------
// Author:                    Magaly Vargas y Joaquín López
// Company:                   ALBALIA INTERACTIVA S.L.
// Assembly version:          1.0.0.0
// Date:                      22/02/2010
// Time:                      12:00
// Solution Name:             OffInvoiceWordAddIn
// Solution Filename:         OffInvoiceWordAddIn
// Solution FullFilename:     C:\Desarrollo\OffInvoiceWordAddIn
// Project Name:              OffInvoiceWordAddIn
// Project Filename:          OffInvoiceWordAddIn.csproj
// Project FullFilename:      C:\Desarrollo\OffInvoiceWordAddIn\OffInvoiceWordAddIn.csproj
// Project Item Name:         Month.cs
// Project Item Filename:     Month.cs
// Project Item FullFilename: C:\Desarrollo\OffInvoiceWordAddIn\XmlMngFiles\Month.cs
// Project Item Kind:         Código
// Purpose:                   
//Copyright © 2009 - 2010 Albalia Interactiva S.L. Reservados todos los derechos.
// ----------------------------------------------------------------------------------------


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

 namespace OffInvoiceWordAddIn.XmlMngFiles
{
     /// <summary>
    /// Clase serializable, representa al nodo del mes dentro de un archivos de gestion de facturas (XmlInvoiceRecord)
     /// </summary>
    public class Month
    {
        /// <summary>
        /// mes del cual se registraran las facturas
        /// </summary>
        [XmlAttribute]
        public string Id { get; set; }

        /// <summary>
        /// Lista de facturas generadas en el mes 
        /// </summary>
        public List<XmlInvoice> InvoiceList { get; set; }


        /// <summary>
        /// crea una nueva instacia de fichero de gestion por mes, inicializa el listado de facturas,
        /// y toma de referencia el mes actual       
        /// </summary>
        public Month()
        {
            this.Id = DateTime.Now.Month.ToString();
            InvoiceList = new List<XmlInvoice>();
        }


        /// <summary>
        /// crea una nueva instacia de fichero de gestion por mes, inicializa el listado de facturas,
        /// y asigna el mes pasado por parametros   
        /// </summary>
        /// <param name="id"> mes a registrar </param>
        public Month(string id)
        {
            InvoiceList = new List<XmlInvoice>();
            this.Id = id;
        }

        /// <summary>
        /// agrega los datos de una nueva facturae
        /// </summary>
        /// <param name="invoice">objeto de tipo XmlInvoice que contiene los datos de registro de una factura a </param>
        public void newInvoice(XmlInvoice invoice)
        {
            try
            {
                EliminarRepetidos(invoice);
            }
            catch (Exception e)
            {
                
                throw e;
            }
            
            InvoiceList.Add(invoice);
        }
        
        
        /// <summary>
        /// Elimina los registros repetidos en el fichero de gestion 
        /// </summary>
        /// <param name="invoice">el registro de la factura que se busca dentro del fichero de gestión</param>
        public void EliminarRepetidos(XmlInvoice invoice) 
        {
            for (int i = 0; i < InvoiceList.Count; i++)
            {
                if (invoice.Status.ToUpper().Equals("DRAFT"))
                {
                    if ((InvoiceList.ElementAt(i).Path.ToUpper().Trim().Equals(invoice.Path.ToUpper().Trim()))) 
                    {
                        InvoiceList.RemoveAt(i);
                    }
                }
                else 
                {
                    if ((InvoiceList.ElementAt(i).Serie.ToUpper().Trim().Equals(invoice.Serie.ToUpper().Trim())) && (InvoiceList.ElementAt(i).N_factura.ToUpper().Trim().Equals(invoice.N_factura.ToUpper().Trim())) && (InvoiceList.ElementAt(i).CIF.ToUpper().Trim().Equals(invoice.CIF.ToUpper().Trim())))
                    {
                        throw new Exception("InfoInvoiceExist");
                    }
                }
                
            }

            
        
        }
  
    }
}
